package chapter06

object Demo11_Object {
  def main(args: Array[String]): Unit = {
//    val student = new Student11("alice" , 11)
//    student.printInfo()
    val newStudent = Student11.newStudent("alice" , 99)
    newStudent.printInfo()

    val newStudent1 = Student11.apply("bob" , 99)
    newStudent1.printInfo()

    //apply方法子啊调用的时候可以直接省略掉  比较简洁
    val newStudent2 = Student11("cary" , 88)
    newStudent2.printInfo()
  }
}
//定义类
//构造方法私有化  就在参数列表前面加private
class Student11 private(val name: String , val age: Int){
  def printInfo(): Unit ={
    println(s"Student11: name = $name, age = $age ,school = ${Student11.school}")
  }
}

//伴生对象 可以直接访问伴生类的私有成员属性和方法
/*
伴生对象定义方法就相当于static定义的方法
定义出来的属性就相当于静态属性
 */
object Student11{
  val school: String = "山西大学"

  //定义以一个类的对象实例的创建方法（工厂方法）
  def newStudent(name: String , age : Int): Student11 = new Student11(name,age)

  //apply方法子啊调用的时候可以直接省略掉  比较简洁
  def apply(name: String , age : Int): Student11 = new Student11(name,age)
}